package com.fu.shop.service;

import com.fu.core.pojo.Goods;
import com.fu.core.pojo.Picture;
import com.fu.core.pojo.Sku;
import com.fu.core.pojo.Type;
import com.fu.core.service.BaseService;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * @author 付龙江
 * @date 2022/2/5 11:29
 */
public interface GoodsService extends BaseService<Goods> {

    /**
     * 查询商品类型集合
     * @param typeName 类型名称
     * @param page 页码
     * @param size 长度
     * @return 返回类型集合
     */
    PageInfo<Type> selectTypeList(String typeName, Integer page, Integer size);

    /**
     * 修改类型的状态
     * @param typeId 类型编号
     * @param typeStatus 要修改成的状态（1是开启 0是关闭）
     * @throws Exception 异常处理
     */
    void updateTypeStatus(Integer typeId,Integer typeStatus)throws Exception;

    /**
     *
     * @return 顶级分类的下拉列表
     */
    List<Type> topTypeList ();

    /**
     * 添加商品类型
     * @param type 类型
     * @throws Exception 异常处理
     */
    void updateOrAddType(Type type)throws Exception;

    /**
     *
     * @param goodsName 商品名称
     * @param page 页码
     * @param size 每页尺寸
     * @return 返回对应数据
     */
    PageInfo<Map<String,Object>> selectGoodsList(String goodsName, Integer page, Integer size);
    List<Map<String,Object>> uploadGoodsList();

    /**
     * 商品上下架
     * @param goodsId 商品编号
     * @param goodsStatus 看是上架还是下架状态  1上架  0是下架状态
     * @throws Exception 异常处理
     */
    void updateGoodsStatus(Integer goodsId, Integer goodsStatus) throws Exception;

    /**
     *
     * @return 商品选择的二级类型
     */
    List<Type> goodsDetailTypeList();

    /**
     *
     * @param goodsId 商品编号
     * @return 所有商品详情信息
     * @throws Exception 异常处理
     */
    Map<String,Object> selectGoodsDetails(Integer goodsId) throws Exception;

    /**
     * 添加商品
     * @param goods 商品
     * @param skus sku信息
     * @param pictures 商品特色图
     * @throws Exception 异常处理
     */
    void addGoods(Goods goods, List<Sku> skus, List<Picture> pictures)throws Exception;


    /**
     * 添加商品
     * @param goods 商品
     * @param skus sku信息
     * @param pictures 商品特色图
     * @throws Exception 异常处理
     */
    void updateGoods(Goods goods, List<Sku> skus, List<Picture> pictures)throws Exception;

}
